//
//  LTUserAccountViewModel.swift
//  微博08
//
//  Created by 123 on 16/3/4.
//  Copyright © 2016年 Tsr. All rights reserved.
//

import UIKit

class LTUserAccountViewModel: NSObject {
    
    // 单例
    static let sharedInstance: LTUserAccountViewModel = LTUserAccountViewModel()
    // MARK: - 属性
    // 用户账号,通过单例可以全局访问
    var userAccount: LTUserAccount?
    
    // 归档路径
    let accountPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last!.stringByAppendingString("/Account.plist")
    
    // MARK: - 方法
    private override init() {
        super.init()
        userAccount = loadUserAccount()
    }
    
    // 3.1调用LTUserAccountViewModel的方法去加载请求
    func loadAccessToken(code: String, accessTokenCallBack: (error: NSError?) -> ()) {
        // 3.2使用CZNetworkTool发起请求获取AccessToken,并且准备闭包
        LTNetworkTools.sharedInstance.loadAccessToken(code) { (response, error) -> () in
            // 3.7判断请求是否失败
            
            // 模拟失败
            // error = NSError(domain: "1", code: 1, userInfo: nil)
            if response == nil || error != nil {
                accessTokenCallBack(error: error)
                return
            }
            
            // 获取access token
            print("access token 请求成功: \(response)")
            
            // 3.8字典转模型,并赋值给属性
            self.userAccount = LTUserAccount(dict: response!)
            
            // 3.9将模型保存到沙盒中
            self.saveUserAccount()
            
            // 回调: 获取accessToken没有出错
            accessTokenCallBack(error: nil)
        }
    }
    
    // 将对象保存到沙盒
    private func saveUserAccount() {
        if userAccount != nil {
            
            print("userAccount: \(accountPath)")
            NSKeyedArchiver.archiveRootObject(userAccount!, toFile: accountPath)
        }
    }
    
    // 将LTUserAccount从沙盒里面解档出来
    private func loadUserAccount() -> LTUserAccount? {
        let account = NSKeyedUnarchiver.unarchiveObjectWithFile(accountPath) as? LTUserAccount
        
        // 还要判断accessToken是否过期,如果过期了,说明AccessToken是没有用的,就不返回这个过期的账号
        // 过期时间: account?.expiresDate  2021-02-27 02:26:20 +0000
        // 当前时间: NSDate() 2016-02-29 02:31:08 +0000
        // 过期时间比当前时间大表示没有过去 >
        
        if account != nil && account?.expiresDate?.compare(NSDate()) == NSComparisonResult.OrderedDescending {
            print("账号没有过期: \(account?.expiresDate)")
            return account
        } else {
            return nil
        }
        
    }

}
